Weno este fin de semana he estado en mi pueblo, por eso eternal wow ha estado off, y decidi coger el svn de scriptdev2 y empezar a "descifrar" funciones de c++ para mangos.
(me estube todo un dia haciendo esto)
Espero que os sirva bastante
/*===================
| LISTA MADE BY BUHO |
====================*/
//////////////////////////////////////////////////////////// /////////////////////////////
////////////////////////////// /////////Funciones/////////////////////////////////////////
/////////////////////////////////////////////////////////// //////////////////////////////
------------------------------------------------------------ -----------------------------
------------------------------ -------FUNCIONES "SET"-------------------------------------
----------------- ------------------------------------------------------------ ------------
p->SetHealth(cantidad) //Cambia la vida de "p" por "cantidad"
player->setlevel(80) //Hace al jugador nivel 80 (por testear)
p->setFaction(14); //Convierte la faccion de "p" en 14
p->SetPower(tipo de poder, cantidad) //Cambia la cantidad de "tipo de poder" por "cantidad"
m_creature->SetFlag(flag, flag) //Igual que remove flag pero no remueve la "flag"
p->SetDisplayId(modelonuevo); //Cambia el modelo de P
p->SetSpeed(MOVE_WALK,X,true); //Cambia la velocidad de moverse, en este caso de andar, por X de p
p->SetHealth(X); //Cambia la vida de p por X
p->setDeathState(estado) //Cambia el estado de muerte (ej: JUST_DIED (acaba de morir))
p->SetVisibility(VISIBILITY_ON) //Hace que p pueda ver (creo; puede ser que p sea visible)
p->SetSpeed(tipomovimiento, velocidad) //Cambia la velocidad de "tipomovimiento" (ej: MOVE_RUN) por "velocidad" (siempre debe terminar con "f")de "p"
pGo->SetGoState(GO_STATE_ACTIVE); //Activa el go, utilizado con el anterior comando
m_creature->SetStandState(tipo); //Cambia el estado de m_creature, Ej: "m_creature->SetStandState(UNIT_STAND_STATE_SLEEP)", este haria que la criatura se pusiera a dormir
SetEquipmentSlots(false, mano_izquierda, mano_derecha, EQUIP_NO_CHANGE)//Equipa mano_izquierda a la mano izquierda del npc y mano_derecha a la mano derecha del npc. Si se usa EQUIP_UNEQUIP se quitan las armas
p->SetLootState(estado) //CAmbia el estado de loteo (ej: "GO_JUST_DEACTIVATED" acabado de lootear") solo funciona con GOs
------------------------------------------------------------ -----------------------------
------------------------------ -------FUNCIONES "GET"-------------------------------------
----------------- ------------------------------------------------------------ ------------
p->getVictim() //Coge el objetivo actual de p
p->GetHealth() //Coge la vida actual de "m_creature"
p->GetMaxHealth() //Coge la vida maxima actual (no de la db, sino la del npc actual)
p->GetPower(tipo de poder) //Coge la cantidad actual de "tipo de poder" de "p"
p->GetMaxPower(tipo de poder) //Coge la cantidad maxima de "tipo de poder" de "p"
Player->GetTeam() //Devuelve la fraccion del jugador (HORDE o ALLIANCE)
Player->GetQuestRewardStatus(id) //Devuelve si ha hecho o no la mision "id"
P->GetPositionX() //Devuelve la coordenada X de P
P->GetPositionY() //Devuelve la coordenada Y de P
P->GetPosition>() //Devuelve la coordenada Z de P
P->GetAngle(U) //Devuelve la orientacion de P respecto U, donde u puede ser m_creature, pGO, player o una variable cualquiera
Player->GetQuestStatus(id) == QUEST_STATUS_INCOMPLETE) //devuelve el estado de la quest "id" por el jugador
p->getFactionTemplateEntry(); //En teoria, devuelve la faccion de P
p->GetEntry() //Devuelve la id de P
p->getFaction() //Devuelve la faccion de P
GO->GetGoType() //Devuelve el tipo de GO que es "GO"
Player->GetGUID() //Devuelve el GUID del personaje, util para menus de Taxis
player->GetBaseSkillValue(id) //Devuelve el "nivel" de la habilidad "id" que tiene el jugador
pGo = instance->GetGameObject(X) //En la instance, coge el GUID de el go "X" y lo almacena en pGO
m_creature->getStandState() //Devuelve el estado de m_creature
p->GetData64(data) //Devuelve la "data64" (ni idea)
p->GetVisibility() //Devuelve la visibilidad (o si es visible, no se) de "p"
float PosX, PosY, PosZ;
p->GetPosition(PosX, PosY, PosZ) //Devuelve las coordenadas en PosX, PosY y PosZ, de "p"
pCreature->GetUInt32Value(id) //Devuelve el Uint32value de "id" de la criatura.
p->GetAreaId() //Devuelve el area id de p
------------------------------------------------------------ -----------------------------
------------------------------ -------FUNCIONES "IS"--------------------------------------
----------------- ------------------------------------------------------------ ------------
ESTAS FUNCIONES SE USAN EN LAS FUNCIONES if/else/elseif (mas abajo hablo de ellas)
p->isAlive() //Devuelve true si el jugador está a salvo
p->isDead() //Devuelve true si p está muerto
p->isInCombat() //Devuelve true si el jugador está en combate
!m_creature->IsNonMeleeSpellCasted(false) //Devuelve true que m_creature no está casteando
p->IsWithinDist(m_creature->getVictim(),25.0f) //Devuelve true si p está a menos de 25f del objetivo
P->IsHostileTo(U) //Devuelve true si P es hostil a U, donde P puede ser m_creature, pGO, player o una variable cualquiera y donde u puede ser m_creature, pGO, player o una variable cualquiera
Player->isInFlight() //Devuelve true si el "player" está
p->GetMap()->IsHeroic(); //Devuelve true si el mapa donde esta "p" es heroico o no
pCreature->isQuestGiver() //Devuelve true si pCreature es un repartidor de misiones
p->IsInEvadeMode() //Devuelve true si "p" esta evitando los ataques
p->isAttackReady() //Devuelve true si "p" puede atacar
p->isTargetableForAttack() //Devuelve true si "p" puede ser atacado
p->IsBanished //Devuelve true si "p" es invisible
p->IsHostileTo(objetivo) //Devuelve true si "p" es hostil a "objetivo"
------------------------------------------------------------ -----------------------------
------------------------------ -------FUNCIONES "HAS"-------------------------------------
----------------- ------------------------------------------------------------ ------------
ESTAS FUNCIONES SE USAN EN LAS FUNCIONES if/else/elseif (mas abajo hablo de ellas)
Player->HasSkill(id) //Devuelve true si el jugador tiene la habilidad "id"
Player->HasSpell(id) //Devuelve true si el jugador tiene el hechizo "Id"
Player->HasItemCount(item,num,true) //Devuelve true si el jugador tiene "num" cantidad del item "item"
p->HasMonsterMoveFlag(movimiento) //Devuelve 3 si el "movimiento" es el movimiento que usa "P"
------------------------------------------------------------ -----------------------------
------------------------------ -------FUNCIONES DE ACCIONES-------------------------------
-------------------- ------------------------------------------------------------ ---------
p->SelectHostilTarget() //Selecciona un objetivo hostil
DoSpawnCreature(ID, X, Y, 0, 0,despawn, 300000); //Invoca una criatura
m_creature->AttackStart(objetivo) //Empieza el combate con el objetivo
p->RemoveFlag(flag, flag); //Quita una flag (ej: no poder ser seleccionado
p->SelectUnit(SELECT_TARGET_RANDOM,0); //Selecciona una unidad (en este caso una cualquiera)
p->DoCast(objetivo, hechizo); //Caste el "hechizo" en el "objetivo"
m_creature->m_canMove = false; //Hace que la m_creature no se pueda mover (no se si funciona)
p->CastSpell(objetivo,idhechizo,false); //Player castea sobre "objetivo" el hechizo "idhechizo"
m_creature->InterruptNonMeleeSpells(false); //Cancela el actual hechizo que estamos casteando
DoScriptText("text", m_creature, target); //m_creature susurra "text" a "target"
DoMeleeAttackIfReady(); //Ataca cuerpo a cuerpo si está preparado
p->HandleEmoteCommand(emote); //No se si funciona, hace un emote en p
pCreature->Attack(pPlayer, true); //pCreature ataca al jugador
pPlayer->TeleportTo(mapid,x,y,z,o); //Lleva al jugador a mapid,x,y,z,o (x,y,z,o ponerles "f" despues de la coordenada)
pPlayer->AreaExploredOrEventHappens(id); //Descubre en el mapa la zona donde se hace la mision "id"
p->SummonCreature(id, X, Y, Z, O, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); //p invoca la criatura con id "id" en x,y,z,o. (TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000, no se que es )
Player->FailQuest(id) //Falla una quest con id "id"
p->RemoveSpellsCausingAura(idaura); //Elimina los hechizos que probocan el aura con id "idaura" de p, donde P puede ser m_creature, pGO, player o una variable cualquiera
m_creature->SendMonsterMove(X, Y, Z, 0, MONSTER_MOVE_WALK, 1); //Ordena a m_creature moverse a las coordenadas x,y,z,o
DoUseDoorOrButton(GUID); //Utiliza el GO con guid "guid", normalmente combinado con
GUID = go->GetGUID();
m_creature->ForcedDespawn(); //Hace que m_creature se despawnee, desaparezca = que .npc delete
p->RemoveAllAuras(); //Elimina todas las auras de P
Creature->DeleteThreatList(); //Elimina el aggro de "creature"
p->CombatStop(true); //Para el combate de p
p->AddThreat(unidad, 0.0f); //Añade "unidad" a la lista de aggro de "p". 0.0f no se que es, creo que es el aggro
p->canFly() //Usado en ifs: Devuelve true si "p" puede volar
p->DealDamage(objetivo, daño, NULL, como_se_hace_daño, tipo_de_daño, NULL, false);//Hacer daño
p->RemoveCorpse() //Elimina el cuerpo de "p"
p->Respawn() //Respawnea "p"
p->EnterEvadeMode() //Hace que "p" entre en modo de evasion de ataques
PlayerTalkClass- >SendPointOfInterest(x,y,icono,flags,data,nombre de localizacion)//Señala en el minimapa y en el mapa algo
------------------------------------------------------------ -----------------------------
------------------------------ -------------OTRAS-----------------------------------------
----------------------------------------------------------- ------------------------------
#define ALGO ola //define la variable algo con el valor ola ("universalmente"), util para definir ids de hechizos (ej: #define HECHIZO_1 123 // HECHIZO_1 tendria el numero 123 que seria un hechizo, y en lugar de poner en donde tengas que poner la id del hechizo, la id del hechizo, podrás poner HECHIZO_1)
rand() //numero aleatorio
Definir una tabla:
float Variable[2][4]= //2 filas, 4 columnas
{
{-1, -2, -3, -4}, //-1 es el valor variable[1][1],segun tengo entendido y -3 es el valor variable[1][3]
{1, 2, 3, 4} //1 es el valor variable[2][1],segun tengo entendido y 3 es el valor variable[2][3]
}; //atencion, la ultima fila no lleva "," despues del ultimo "}"
Hacer una funcion:
void nombre_de_la_funcion(variables)
{
acciones
}
Llamar una funcion:
nombre_de_la_funcion(variables)
Hacer un comentario de una linia-> //
Hacer un comentario de la extension que quieras-> Al principio -> /* y al final */
************************************************************ ************************************************************
********************************************Hacer un temporizador: ******************************************************
void UpdateAI(const uint32 diff)
{
if (Temporizador < diff) //diff creo que viene definido por scriptdev2 y es igual a 1
{
acciones
Temporizador = 500; //En segundos, creo (recomendado hacer esto para restablecer el temporizador
}else Temporizador -= diff; //Restar a temporizador, diff y almacenar el valor en temporizador, si temporizador no es menor que diff
}
************************************************************ ************************************************************ *
*******************Hacer un si es "tal" hacer "eso", sino, hacer "eso otro" modo corto:**********************************
si es tal ? hacer esto : sino hacer esto otro, //: seria "sino"
Ej:
m_bIsHeroicMode ? H_SPELL_ARCANE_EXPLOSION : SPELL_ARCANE_EXPLOSION //si el modo es heroico, haer el hechizo H_SPELL_ARCANE_EXPLOSION, sino, hacer el hechizo SPELL_ARCANE_EXPLOSION
************************************************************ ************************************************************ **
*****************************************Dar un objeto a un jugador: ******************************************************
Item* item = pPlayer->StoreNewItem(dest,23614,true);
if (item)
pPlayer->SendNewItem(item,1,false,true);
************************************************************ ************************************************************ **
***************************Hacer que una criatura acabada de invocar ataque a alguien:***********************************
Summoned = DoSpawnCreature(id, X, RandY, 0, 0, nosequees, nosequees);
if (Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(victim);
//////////////////////////////////////////////////////////// /////////////////////////////
////////////////////////////// //DEFINIR TIPOS DE VARIABLES///////////////////////////////
/////////////////// //////////////////////////////////////////////////////////// //////////
uint64 variable //Unit64
uint32 variable //Uint32
int variable //Integer
bool variable //Booleano
//////////////////////////////////////////////////////////// /////////////////////////////
////////////////////////////// /////////OPERADORES////////////////////////////////////////
/////////////////////////////////////////////////////////// //////////////////////////////
numb1 -= numb2 //Resta numb2 a numb1 y el nuevo valor es almacenado en numb1
numb1 += numb2 //Suma numb2 y numb1 y el nuevo valor es almacenado en numb1
numb0 = numb1*numb2 //Multiplica numb1 por numb2 y almacena el valor en numb0 (probar numb1 *= numb2)
numb0 = numb1/numb2 //Divide numb1 entre numb2 y almacena el valor en numb0 (probar numb1 /= numb2)
numb0 = numb1+numb2 //Suma numb1 y numb2 uy almacena el valor en numb0
************************************************************ ************************************************************
*********************************************************Sw itch/Case: ***************************************************
Coge una variable y va "mirando" su valor, y si su valor es uno de los señalados en un "case" se ejecutan las acciones de ese "case"
switch(variable o funcion)
{
case valor_de_la_variable_o_de_la_funcion:
acciones
break;
case otro_valor_de_la_variable_o_de_la_funcion:
acciones
breaK;
}
************************************************************ ************************************************************
********************************************************If/ else/elseif: *************************************************
If es igual a "si" else es igual a "sino"
Entonces:
Si(condicion_es_cierta)
{
hacer acciones
}
sinoesciertapero(otra_condicion_es_cierta)
{
hacer acciones
}
sino
{
hacer otras acciones
}
If (condicion){
acciones
}
elseif (condicion){
acciones
}
else {
acciones
}
NOTA: Else y elseif son opcionales
//////////////////////////////////////////////////////////// /////////////////////////////
////////////////////////////// /////////TAXI!!!!!!////////////////////////////////////////
/////////////////////////////////////////////////////////// //////////////////////////////
MENU DE TAXI:
Opciones:
player->ADD_GOSSIP_ITEM(id_icono, "texto que lee el jugador" , GOSSIP_SENDER_MAIN, action); //action es el "id" de lUA
Enviar el menu al jugador:
player- >SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature- >GetGUID());
Para que salga X cosa al clicar una opcion:
switch(action)
{
case 1: //1 es la "action" que se indica en ADD_GOSSIP_ITEM
acciones
break;
case 2: //2 es la "action que se indica en ADD_GOSSIP_ITEM
break;
}
Para que se cierre el menu:
player->CLOSE_GOSSIP_MENU();
/ ***********************************************
============ ====================================
AL COMIENZO DEL SCRIPT DEBEIS PONER:
#include "sc_gossip.h"
#include "GossipDef.h"
#include "Player.h"
#include "precompiled.h"
bool GossipHello_nombre_del_script(Player *player, Creature *_Creature) //cambiar nombre_del_script
{
player->SetTaxiCheater(true);
opciones del menu
return true;
}
=================================================
DESPUES DEL MENU PRINCIPAL DEBEIS PONER:
void SendDefaultMenu_nombre_del_script(Player *player, Creature *_Creature, uint32 action )//cambiar nombre_del_script
{
y las acciones
return true;
}
==================================================
========= =========================================
AL FINAL DEL SCRIPT DEBEIS PONER:
void AddSC_nombre_del_script()
{
Script *newscript;
newscript = new Script;
newscript->Name="nombre_del_script";
newscript- >pGossipHello = &GossipHello_nombre_del_script;
newscript->pGossipSelect = &GossipSelect_nombre_del_script;
newscript->RegisterSelf();
}
============================================================ ==
========================================================= =====
EJEMPLO:
#include "sc_gossip.h"
#include "GossipDef.h"
#include "Player.h"
#include "precompiled.h"
bool GossipHello_Taxi(Player *player, Creature *_Creature)
{
player->SetTaxiCheater(true);
player- >ADD_GOSSIP_ITEM(5, "Bienvenido" , GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM(5, "Convierteme" , GOSSIP_SENDER_MAIN, 2);
player->CLOSE_GOSSIP_MENU();
return true;
}
void SendDefaultMenu_Taxi(Player *player, Creature *_Creature, uint32 action)
{
switch(action)
{
case 1: //1 es la "action" que se indica en ADD_GOSSIP_ITEM, mirar en "bienvenido"
player->CLOSE_GOSSIP_MENU();
player- >TeleportTo(0, 1819.71f, 238.79f, 63.5321f, 0.0f); //Teletransporta el jugador a Entrañas
break;
case 2: //2 es la "action que se indica en ADD_GOSSIP_ITEM, mirar en "convierteme"
player->SetDisplayId(123)
break;
}
return true;
}
void AddSC_Taxi()
{
Script *newscript;
newscript = new Script;
newscript->Name="Taxi";
newscript->pGossipHello = &GossipHello_Taxi;
newscript->pGossipSelect = &GossipSelect_Taxi;
newscript->RegisterSelf();
}
============================================================ ==
========================================================= =====
NOTA: PARA QUE OS FUNCIONEN LOS SCRIPTS DE NPCS, GOs O ITEMS, AL FINAL DE LAS TABLAS DE item_plates, creature_templates, **_templates... hay una columna que pone "scriptname" pues ahi poneis el nombre del script que se indica aqui:
void AddSC_Taxi()
{
Script *newscript;
newscript = new Script;
newscript->Name="Taxi"; <----------------------------NOMBRE DEL SCRIPT!!!!
newscript->pGossipHello = &GossipHello_Taxi;
newscript->pGossipSelect = &GossipSelect_Taxi;
newscript->RegisterSelf();
}
y en el principio del script:
#include "precompiled.h"
Espero que os haya servido esta guia/lista de comandos.
Si es asi, darle al boton "gracias"
Creditos:
-A Buho de gratis wow (yo), por haber buscado por todos los scripts de scriptdev2 todos los comandos, haberlos traducido y recopilado, por haber hecho el ejemplo del taxi y la guia
-A scriptdev2 por hacer este maravilloso scriptin |
|
|
|