/* * SpellCast: User wants to cast given spell. */ void SpellCast(spell *sp) { if (GetPlayer()->viewID && (GetPlayer()->viewID != GetPlayer()->id)) { if (!(GetPlayer()->viewFlags & REMOTE_VIEW_CAST)) return; } /* If we don't need target, just cast spell */ if (sp->num_targets == 0) { RequestCast(sp->obj.id, NULL); return; } if( GetUserTargetID() != INVALID_ID ) { ID id = GetUserTargetID(); // User has target already selected. if (id == GetPlayer()->id || FindVisibleObjectById(id)) { /* Make temporary list for sending to server */ temp_obj.id = GetUserTargetID(); temp_obj.temp_amount = 1; RequestCast( sp->obj.id, temp_list ); } else // Target cannot be seen. GameMessage( GetString( hInst, IDS_TARGETNOTVISIBLEFORCAST ) ); return; } /* Get target object from user */ /* Save spell # */ use_spell = sp->obj.id; /* Register callback & select item */ GameSetState(GAME_SELECT); SetSelectCallback(CastCallback); if (UserMouselookIsEnabled()) { while (ShowCursor(TRUE) < 0) ShowCursor(TRUE); } }
/* * ChooseCharacter: Ask user to choose a character from the given characters. */ void ChooseCharacter(Character *characters, WORD num_characters, char *motd, BYTE num_ads, Advertisement *ads, BOOL quickstart) { int retval; PickCharStruct s; if ((num_characters == 1) && quickstart && (characters->flags != 1)) { char_to_use = characters->id; GoToGame(char_to_use); return; } GameSetState(GAME_PICKCHAR); s.characters = characters; s.num_characters = num_characters; s.motd = motd; s.num_ads = num_ads; s.ads = ads; retval = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_CHARPICK), cinfo->hMain,PickCharDialogProc, (LPARAM) &s); CharactersDestroy(characters, num_characters); switch (retval) { case IDCANCEL: return; case IDOK: GoToGame(char_to_use); return; case IDC_RESET: /* Player wants to start a new character */ RequestCharInfo(); break; } }
/* character is id of character to use */ void GoToGame(ID character) { RequestUseCharacter(character); GameSetState(GAME_INIT); // Start up game interface }